/*
 * @(#)CtrlConfiguracion.java 1.50 16/11/13
 * 
 */

/**
 * Implementaci�n de la clase que controla la configuraci�n del usuario as� como Path's de guardado de datos o de lectura de �stos por defecto.
 * Estos cambios se efectuar�n desde interf�cie
 * 
 * @author Anna Lopez Mora
 */
package controladoresdominio;

import java.util.Map;

import dominio.Configuracion;

public class CtrlConfiguracion {
	private Configuracion conf;
	
	
	/**
	 * Creadora de la clase
	 * 
	 * @param conf	instancia del objeto configuracion
	 */
	public CtrlConfiguracion(Configuracion conf) {
		System.out.println("he leido un fichero de configuracion corectamente");
		this.conf = new Configuracion();
		this.conf = conf;
	}
	
	/**
	 * Creadora de la clase
	 * 
	 * @param pathT			ruta que contiene el fichero desde el que se carga el listado de tareas del sistema 
	 * @param pathG			ruta que contiene el fichero desde el que se cargan los listados optimizados del sistema
	 * @param pathST		ruta que contiene el fichero desde el que se cargan las subtareas del sistema
	 * @param algo			booleano que indica el algoritmo que se usara
	 * @param opera			booleano que indica el operador que se usara
	 * @param its			entero que indica el numero de iteraciones que se realizaran
	 * @param opt			booleano que indica si sobre re-optimizar sobre el primer resultado optimizado o no.
	 */
	public CtrlConfiguracion(String pathT, String pathG, String pathST, boolean algo, boolean opera, int its, boolean opt) {
		conf = new Configuracion(pathT, pathG, pathST, algo, opera, its, 0,0, opt);
	}
	/**
	 * Creadora de la clase
	 * 
	 * @param pathT			ruta que contiene el fichero desde el que se carga el listado de tareas del sistema 
	 * @param pathG			ruta que contiene el fichero desde el que se cargan los listados optimizados del sistema
	 * @param pathST		ruta que contiene el fichero desde el que se cargan las subtareas del sistema
	 * @param algo			booleano que indica el algoritmo que se usara
	 * @param opera			booleano que indica el operador que se usara
	 * @param its			entero que indica el numero de iteraciones que se realizaran
	 * @param alfa			double que indica el factor de enfriamiento del algoritmo
	 * @param temp			double que indica la temperatura inicial del algoritmo
	 * @param opt			booleano que indica si sobre re-optimizar sobre el primer resultado optimizado o no.
	 */
	public CtrlConfiguracion(String pathT, String pathG, String pathST, boolean algo, boolean opera, int its, double alfa, double temp, boolean opt) {
		System.out.println("deberia entrar al controlador de configuracion por aqui");
		conf = new Configuracion(pathT, pathG, pathST, algo, opera, its, alfa, temp, opt);
	}
	
	/**
	 * Procedimiento que recoge la configuracion del sistema.
	 * 
	 * @return				retorna una instancia de Configuracion
	 */
	public Configuracion getConfig() {
		return conf;
	}
	
	/**
	 * Procedimiento que da valor a la ruta donde se guarda el listado de tareas del sistema
	 * 
	 * @param pathT			ruta dada por el usuario
	 */
	public void setPathTarea(String pathT) {
		conf.setPathTareas(pathT);
	}

	/**
	 * Procedimiento que da valor a la ruta donde se guardan los listados optimizados de tareas
	 * 
	 * @param pathG			ruta dada por el usuario
	 */
	public void setPathGraph(String pathG) {
		conf.setPathGraph(pathG);
	}
	
	/**
	 * Procedimiento que da valor a la ruta donde se guarda el listado de subtareas del sistema
	 * 
	 * @param pathST			ruta dada por el usuario
	 */
	public void setPathSubtarea(String pathST) {
		conf.setPathSubtareas(pathST);
	}
	
	/**
	 * Procedimiento que recoge la ruta donde se guarda el listado de tareas del sistema
	 * 
	 * @return 			String con la ruta pedida
	 */
	public String getPathTarea() {
		return conf.getPathTareas();
	}
	
	/**
	 * Procedimiento que recoge la ruta donde se guardan los listados optimizados de tareas
	 * 
	 * @return 			String con la ruta pedida
	 */
	public String getPathGraph() {
		return conf.getPathGraph();
	}
	
	/**
	 * Procedimiento que recoge la ruta donde se guarda el listado de subtareas del sistema
	 * 
	 * @return 			String con la ruta pedida
	 */
	public String getPathSubtarea() {
		return conf.getPathSubtareas();
	}
	
	/**
	 * Procedimiento que recoge el booleano que indica que algoritmo usar
	 * 
	 * @return 			[por defecto]false (hillclimbing),  true (Simulated Anealing)
	 */
	public Boolean getTypeAlgoritmo() {
		return conf.getTypeAlgoritmo();
	}
	
	/**
	 * Procedimiento que recoge el booleano que indica que 
	 * 
	 * @return 			String con la ruta pedida
	 */
	public void setTypeAlgoritmo(Boolean typeAlgoritmo) {
		conf.setTypeAlgoritmo(typeAlgoritmo);
	}
	
	/**
	 * Procedimiento que recoge el booleano que indica que operador usar al optimizar
	 * 
	 * @return 			[por defecto]false (cambio de nodos), true (reversar segmentos)
	 */
	public Boolean getTypeOperator() {
		return conf.getTypeOperator();
	}
	
	/**
	 * Procedimiento que da valor al booleano que indica el algoritmo que se debe usar
	 * 
	 * @param typeOperator		boolean que indica el algoritmo que usar
	 */
	public void setTypeOperator(Boolean typeOperator) {
		conf.setTypeOperator(typeOperator);
	}
	
	/**
	 * Procedimiento que recoge el numero de iteraciones que debe realizar el algoritmo
	 * 
	 * @return 			entero - 100 por defecto
	 */
	public int getIteraciones() {
		return conf.getIteraciones();
	}
	
	/**
	 * Procedimiento que da valor al numero de iteraciones que debe realizar el algoritmo
	 * 
	 * @param iteraciones		iteraciones a realizar
	 */
	public void setIteraciones(int iteraciones) {
		conf.setIteraciones(iteraciones);
	}
	
	/**
	 * Procedimiento que recoge el factor que indica la tasa de enfriamiento del algoritmo
	 * 
	 * @return 			double con el factor - 1.0 por defecto
	 */
	public double getAlfa() {
		return conf.getAlfa();
	}
	
	/**
	 * Procedimiento que da valor a la tasa de enfriamiento del algoritmo
	 * 
	 * @param alfa		double con tasa de enfriamiento
	 */
	public void setAlfa(double alfa) {
		conf.setAlfa(alfa);
	}
	
	/**
	 * Procedimiento que recoge la temperatura inicial del algoritmo
	 * 
	 * @return 			double con el valor - 0.05 por defecto
	 */
	public double getTemp() {
		return conf.getTemp();
	}
	
	/**
	 * Procedimiento que da valor a la temperatura del algoritmo
	 * 
	 * @param temp		double con temperatura del algoritmo
	 */
	public void setTemp(double temp) {
		conf.setTemp(temp);
	}
	
	/**
	 * Procedimiento que recoge la configuracion actual del sistema.
	 * 
	 * @param config	map vacio que despues contendra la configuracion
	 * @return 			Map<String,String> configuracion actual guardada en un map
	 */
	public Map<String, String> getConfiguracion(Map<String, String> config) {
		return conf.getConfiguracion(config);
	}
	
	/**
	 * Procedimiento que comprueba si el usuario desea re-optimizar el resultado obtenido
	 * 
	 * @return 			[false por defecto] boolean que indica si se debe re-optimizar
	 */
    public boolean OptimizeResults(){
        return conf.isOpt();
    }
}
